/**
 * @Author @fiber-cloud
 * @Date 2025/10/24 20:41
 *  描述每次的“编译+运行”的整个过程
 */
public class Task {
    // 参数： 代码是什么？
    // 返回值：编译运行的结果

    // 通过一组常量来约定临时文件的名字.
    // 这个表示所有临时文件所在的目录
    private static final String WORK_DIR = "./tmp/";
    // 约定代码的类名
    private static final String CLASS = "Solution";
    // 约定要编译的代码文件名.
    private static final String CODE = WORK_DIR +"Solution.java";
    // 约定存放编译错误信息的文件名
    private String COMPILE_ERROR = WORK_DIR + "compileError.txt";
    // 约定存放运行时的标准输出的文件名
    private String STDOUT = WORK_DIR + "stdout.txt";
    // 约定存放运行时的标准错误的文件名
    private String STDERR = WORK_DIR + "stderr.txt";

    public Answer compileAndRun(Question question){

        // 之前这里的名字都是静态常量. 但是现在要实现针对每个请求都有不同的临时目录, 就不能使用静态常量了


        // 1. 把 question 中的 code 写入到一个 Solution.java 文件中.
        // 2. 创建子进程, 调用 javac 进行编译. 注意! 编译的时候, 需要有一个 .java 文件.
        //       如果编译出错, javac 就会把错误信息给写入到 stderr 里. 就可以用一个专门的文件来保存. compileError.txt
        //    需要先把编译命令给构造出来.
        // 如果编译出错了, 错误信息就被记录到 COMPILE_ERROR 这个文件中了. 如果没有编译出错, 这个文件是空文件.
        // 编译正确! 继续往下执行运行的逻辑
        // 3. 创建子进程, 调用 java 命令并执行
        //       运行程序的时候, 也会把 java 子进程的标准输出和标准错误获取到. stdout.txt, stderr.txt
        // 4. 父进程获取到刚才的编译执行的结果, 并打包成 compile.Answer 对象
        //       编译执行的结果, 就通过刚才约定的这几个文件来进行获取即可.

    }
}
